/*
 * @Date: 2022-04-17 23:44:28
 * @LastEditTime: 2022-05-16 10:08:25
 * @brief: 网络层数据结构
 */
#ifndef MESSAGE_STRUCT_H
#define MESSAGE_STRUCT_H

#define MAX_USERNAME_LENGTH 8
#define MAX_PASSWORD_LENGTH 8

enum MessageType {
  NOTYPE = 0,
  MT_USERINFO = 1, // 用户信息，data 为用户密码
  MT_CHATINFO = 2, // 聊天信息，data 为聊天内容
  MT_FILE_UPLOAD = 3, // 文件上传信息, data 为文件切片
  MT_FILE_DOWNLOAD = 4, // 文件下载信息, data 为文件切片
  EXIT = 5
};

enum StatusType {
  NOSTATUS = 0,
  SUCCESS = 200, // 成功
  PASSWORDERROR = 401, // 密码错误
  NOTFOUND = 404 // 用户不存在、文件不存在等
};

// 定长 HEADER_LENGTH
struct Header {
  int bodySize = 0; // data 长度 4B
  MessageType type = NOTYPE; // 信息类型 4B
  char source[MAX_USERNAME_LENGTH] = {0}; // 源用户名 8B
  char destination[MAX_USERNAME_LENGTH] = {0}; // 目的用户名 8B
  StatusType status = NOSTATUS; // 状态码，缺省值为0 4B
  char zero[4] = {0}; // 用 0 填充 4B
};

#endif // MESSAGE_STRUCT_H